<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once('ExceptionDAO.php');
include_once 'util/MapError.php';
include_once 'TOEmprestimo.php';
include_once 'TOItem.php';
include_once 'TOTipo.php';

/**
 * DAO para operações de banco para emprestimo do item
 * @author Douglas Rafael
 * @package models
 */
class DAOEmprestimo extends CI_Model {

    /**
    * Método para <b>Listar</b> os emprestimos do item de acordo com o código
    * @param type $codigo
    * @param type $init
    * @param type $quant
    * @return array retorna um array de TOVenda
    * @throws ExceptionDAO 
    */
    public function get($codigo, $init, $quant) {
        try {
            $this->db->join('usuario_admin a','a.id = e.usuario_admin_id');
            $this->db->join('item i','i.codigo = e.item_codigo');
            $this->db->join('item_tipo t','t.id = i.item_tipo_id');
            $this->db->where('item_codigo', $codigo);
            $this->db->order_by('e.id', 'ASC');
            $result = $this->db->get('emprestimo e', $quant, $init);

            $emprestimos = array();
            if ($result){
                foreach ($result->result() as $value){
                    $emprestimo = new TOEmprestimo();
                    $emprestimo->codigo = $value->id;
                    $emprestimo->data_saida = $value->data_saida;
                    $emprestimo->data_retorno = $value->data_retorno;
                    $emprestimo->status = $value->status;
                    
                    $emprestimo->admin = new TOAdmin();
                    $emprestimo->admin->nome = $value->nome;
                    
                    $emprestimo->item = new TOItem();
                    $emprestimo->item->codigo = $value->id;
                    $emprestimo->item->titulo = $value->titulo;
                    
                    $emprestimo->item->tipo = new TOTipo;
                    $emprestimo->item->tipo->codigo = $value->item_tipo_id;
                    $emprestimo->item->tipo->nome = $value->nome;
                    
                    array_push($emprestimos, $emprestimo);
                }
                
                return $emprestimos;
            }
        } catch (Exception $e) {
            $num = $this->db->_error_number();
            $msg = $this->db->_error_message();

            //Traduz o tipo de erro de acordo com $num
            $erro = new MapError();
            throw new ExceptionDAO($erro->getError($num, $msg));
        }
    }
    
    /**
     * Retorna o total de emprestimos de um item de acordo com o codigo
     * @param type $codigo
     * @return type 
     */
    public function quant_get($codigo){
        $this->db->where('item_codigo', $codigo);
        return $this->db->count_all_results('emprestimo');
    }
    
    /**
     * Retorna o total de emprestimos geral
     * @param type $codigo
     * @return type 
     */
    public function quant_get_all(){
        return $this->db->count_all_results('emprestimo');
    }

}